昨日我們將flask打包成image成功在容器中run起來,今天我要來分享的是,我想要將redis & celery & flask這三個服務都在容器中run起來,可是只打包成一個image而不是三個,這時候我們就可以使用compose。
compose是用yml檔所寫成,而yml只是YAML檔案的副檔名,YAML這裡就不多做介紹,我們新增一個docker-compose.yml的檔案,接下來馬上來看一下docker-compose.yml的內容。
# docker-compose.yml
version: '3.8'
services:
web:
image: flask
container_name: web
ports:
- 5000:5000
command: gunicorn --bind 0.0.0.0:5000 app:app --preload
environment:
- CELERY_BROKER_URL=redis://redis:6379/0
- CELERY_RESULT_BACKEND=redis://redis:6379/0
depends_on:
- redis
worker:
build: .
container_name: 2022ithome_env_web_worker
command: celery --app app.celery worker --loglevel=info
environment:
- CELERY_BROKER_URL=redis://redis:6379/0
- CELERY_RESULT_BACKEND=redis://redis:6379/0
depends_on:
- web
- redis
redis:
image: redis
ports:
- 6379:6379
container_name: docker_composer_redis
基本上docker-compose跟dockerfile內容的指令大同小異,當然還有更多的設定,這裡我簡單說明我docker-compose的內容。首先用version決定docker-compose的版本,web這個服務使用flask這個image run container,也就是我們昨天build的image,然後設定容器名稱叫「web」以及容器對外的port號,下達容器執行的命令,最後設定依賴服務的優先順序,後面兩個服務也跟第一個的類似,接著我要來分享實作的畫面。
下達docker-compose up
之後,可以看到正在運行我們在yml檔所撰寫的內容。
build 當前目錄底下dockerfile
創建並運行容器
接著我們可以像昨天一樣開啟網頁,然後像之前一樣進行測試,這個時候我們就能看到,訊息的更新